Verwendung von MC_DigitalCamSwitch_HighPrecision
Sie finden das Beispiel BasicMotion_DigitalCamSwitch_HighPrecision.project ist im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples.
Dieses Beispiel zeigt, wie Sie die Ausgänge von SMC_DigitalCamSwitch_HighPrecision verwenden können, um digitale Ausgänge mit hoher Zeitauflösung anzusteuern. Als Beispiel werden die Klemmen EL2258 und EL2252 von der Firma Beckhoff verwendet.
Hinweis
Die Gerätebeschreibungen von der Fa. Beckhoff sind im Beispiel nicht enthalten. Laden Sie diese bitte direkt beim Hersteller herunter und installieren Sie sie im Geräte-Repository. Für den Betrieb des Beispiels benötigen Sie einen Buskoppler EK1100, eine Klemme EL2258 und eine Klemme EL2252.
Wichtig
Dieses Beispiel wurde gegen die Revision 0017 der EL2258 und die Revision 0020 der EL2252 entwickelt und getestet. Es hat lediglich Beispielcharakter. Wir übernehmen keine Garantie für die Korrektheit. Der Quellcode muss vor Verwendung getestet und gegebenenfalls auf andere Revisionen der Klemmen angepasst werden.
Struktur der Applikation
Die Applikation besteht aus einem Programm Main, den Funktionsbausteinen DigitalCamSwitch_EL2258 und DigitalCamSwitch_EL2252 sowie einem Buskoppler EK1100 mit den Ausgangsklemmen EL2258 und EL2252.
Die Funktionsbausteine DigitalCamSwitch_EL2258 und DigitalCamSwitch_EL2252 sind der Kern des Beispiels. Sie zeigen, wie man den Ausgang Events von SMC_DigitalCamSwitch_HighPrecision verwenden kann, um digitale Ausgänge zu programmieren. Die Funktionsbausteine sind als Muster zu verstehen, das an andere Hardware angepasst werden kann.
DigitalCamSwitch_EL2258
Bei steigender Flanke am Eingang
Enablewird der Funktionsbaustein initialisiert. In den ZuständenSTATE_INIT_0undSTATE_INIT_1werden die SignaleOutputBufferResetder Klemme EL2258 geschrieben und es wird das ArrayaLastEventIdsinitialisiert. In diesem Array wird pro Track die ID des zuletzt verarbeiteten Events gespeichert. Somit kann verhindert werden, dass ein Event mehrfach an die Klemme übergeben wird.Im laufenden Betrieb (
STATE_ACTIVE) werden alle Tracks durchlaufen und für jeden Track nachfolgende Logik bearbeitet:Prüfung, ob die Klemme EL2258 die zuletzt kommandierten Events bereits übernommen hat (
ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter).Durchlaufen aller Events des Tracks. Nur die Events, deren
ToggleEventIdgrößer ist als die zuletzt bearbeitete ID, werden weiter betrachtet. (AbfrageEventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))Siehe Abschnitt "Hinweis zur Event-Reihenfolge".
Umrechnung der
Durationdes Events in einen EtherCAT-Zeitstempel und entsprechend Schreiben der AusgängeChannelsOut[channel].OutputEventStateundChannelsOut[channel].OutputEventTime.Abbruch der Bearbeitung nach höchstens 5 Events.
Mitteilung an die Klemme, dass neue Events anliegen, wenn mindestens ein Event gefunden wurde (C
hannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1).
Hinweis zur Event-Reihenfolge
Die Events werden vom Funktionsbaustein SMC_DigitalCamSwitch_HighPrecision pro Track in einem Array zurückgegeben. Für jedes Event wird die SwitchNumber und eine sogenannte ToggleEventId zurückgegeben. Diese ToggleEventId ist pro Track eindeutig und aufsteigend.
Für weitere Informationen siehe SMC_CAMSWITCH_TOGGLE_EVENT.
Im Beispiel wird in dem Array aLastEventIds[trackNo] pro Track gespeichert, welche ToggleEventId in einem vergangenen Bausteinaufruf zuletzt an die Klemme übertragen wurde. Da die ToggleEventIds aufsteigend sind, ist beim nächsten Aufruf genau bekannt, welche Events noch übertragen werden müssen.
Da nicht bekannt ist, bei welcher
ToggleEventIddie Events starten, wird neben der Id noch einvalid-Flag im DatentypEventIdgespeichert. Beim VergleichEventId_GreaterThanwird diesesvalid-Flag entsprechend berücksichtigt.Die
ToggleEventIdshaben den 32-Bit-DatentypUDINTund können damit prinzipiell bei entsprechend langer Laufzeit oder hoher Schaltfrequenz überlaufen. Der Wert geht dann von 2^32-1 wieder nach 0. Die VergleichsfunktionEventId_GreaterThanberücksichtigt auch die 32-Bit-Überläufe.
PDO Mapping EL2258
Die Ausgänge ChannelsOut und ChannelsIn des Funktionsbausteins DigitalCamSwitch_EL2258 sind mit den entsprechenden E/A-Kanälen der Klemme EL2258 verbunden. Im nachfolgenden Bild sind die Mappings für Channel 1 dargestellt. Bei Channel 2 ist es ähnlich, lediglich der Index beim Zugriff auf ChannelsOut und ChannelsIn ist 2, nicht 1.

DigitalCamSwitch_EL2252
Das Grundprinzip ist identisch zum DigitalCamSwitch_EL2258. Der Unterschied besteht darin, wie die Signale geschrieben werden, da die Klemme EL2252 nur ein aktives Event programmieren kann.
Zuerst wird der Funktionsbaustein in
STATE_INITinitialisiert.In
STATE_CHECK_FOR_EVENTwird überprüft, ob Events vom FunktionsbausteinSMC_DigitalCamSwitch_HighPrecisionanstehen.Wenn ein Event vorhanden ist, muss das Event innerhalb von zwei Zyklen programmiert werden:
Im ersten Zyklus werden die Ausgänge und der EtherCAT-Zeitstempel geschrieben. Der Ausgang
Activatewird auf 0 gesetzt.Im zweiten Zyklus wird in
STATE_ACTIVATE_EVENT_IN_EL2252der AusgangActivateauf 3 gesetzt. Damit wird das Event in der Klemme aktiviert.
In
STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTSwird anschließend gewartet, bis das Event ausgeführt wurde. Hierfür werden die Signale des EingangsFeedbackder Klemme verwendet.
PDO Mapping EL2252

Main
Im Hauptprogramm werden vier Schalter konfiguriert, 2 auf jedem Track. Die Tracks erhalten zudem unterschiedliche Einschalt- und Ausschaltkompensationen (OnComp, OffComp):

Das Programm enthält die nötigen Bausteinaufrufe, um einen Forecast für die Achse zu aktivieren und sie konstant mit 180°/s zu bewegen (*), sowie für SMC_DigitalCamSwitch_HighPrecision, DigitalCamSwitch_EL2258 und DigitalCamSwitch_EL2252. Bevor mit der Bewegung gestartet wird, muss der Feldbus vollständig hochgefahren sein. Ansonsten können die Events nicht zur Klemme übertragen werden.
(*) Die konstante Bewegung wurde gewählt, um das Beispiel einfach und übersichtlich zu halten. Der Funktionsbaustein SMC_DigitalCamSwitch_HighPrecision funktioniert jedoch mit allen Bewegungsarten. Er liefert zum Beispiel auch während einer Beschleunigungsphase oder bei Kurvenscheiben exakte Zeitstempel.
Inbetriebnahme
Übersetzen Sie die Applikation und laden Sie sie auf eine Steuerung.
Starten Sie die Applikation.